1

strings类型

设值

设单个值
set key value
如果不存在,设一个值
setnx key value 
//nx: not exists
设置过期时间(expired time)
setex key [number] value 
//number为有效期,有效期过后,值为nil
把number索引后面替换为value
setrange key [number] value 
设置多个值
mset key1 value1 key2 value2 …
批量设值
msetnx key1 value1 key2 value2 …
//设值全部成功或全部回滚

取值

get key
设置key值,并返回key的旧值
getset key value
获取指定区间的子字符串
getrange key number1 number2
批量获取key值,不存在的返回nil
mget key1 key2 key3 …

值操作

自增1
incr key
增加指定值
incrby key number
自减1
decr key
减去指定值
decry key number
拼接字符
append key value
取key的value长度
strlen key

hashes类型

创建hash数据结构,指定key值为value
hset hash_name key value
如果不存在,设置新值
hsetnx hash key value
批量设定hash的多个field
hmset hash key1 value1 key2 value2 …
获取hash指定的key值
hget hash key
获取指定的全部key值
hmget hash key1 key2 …
给指定的hash field加上定值number
hincrby hash key number
指定的field是否存在
hexists hash key
获取指定的hash的field数量
hlen hash
移除指定的field
hdel hash key
返回所有key值
hkeys hash
返回所有value值
hvals hash
返回所有key value
hgetall hash

lists类型

 链表结构,主要功能是push pop,获取范围内的值
 分非阻塞版本(默认)、阻塞版本
list左侧(或称头部)添加值value
lpush list value
list右侧(或称尾部)添加值value
rpush list value
在key对应list的位置之前/之后插入元素value
linsert list before/after key value
设置list中指定下标元素值
lset list index value
从list中删除count个value值
lrem list count value 
保留指定区间的值
ltrim list index1 index2
弹出顶部元素并返回该值
lpop list
同上,底部
rpop list
弹出list1底部元素,并添加到list2头部,返回该值
rpoplpush list1 list2
返回value在list中的索引
lindex list value
返回list长度
llen list

sets类型

 集合,和数学的集合概念相似,有交并差等操作(union、intersection、difference)
 无序string类型集合,由hashtable实现,复杂度O(1)
添加set值
sadd set value
移除set中的值value
srem set value
随机移除set的value并返回
spop set
差集
sdiff set1 set2
 返回set1于set2的差集(即set1中不存在于set2中的value的集合)
 sdiff set1 set2的结果 不等于 sdiff set2 set1的结果
将set1 set2的差集存储到set3中
sdiffstore set3 set1 set2
返回set1 set2的交集
sinter set1 set2
将交集存储到set3
sinterstore set3 set1 set2
并集
sunion set1 set2
将并集存储到set3
sunionstore set3 set1 set2
将value从set1移动到set2
smove set1 set2 value
返回set中元素数量
scard set
判断value是否是set中元素
sismember set value
随机获取set值
srandmember set

Sorted sets类型 : zset

 set基础上添加了顺序属性,zset会按新的值调整顺序,可以理解为有两列的数据库表,一列为value,一列为排序数值。
 zset每个元素会关联一个double类型的score。
 sorted set是skip list和hash table的混合体
在索引位置添加值value
zadd zest index value
移除value
zrem zest value
自增
zincrby zset number value
 如果value存在于zset中,其score值增加number
 如果value不存在,在zset中增加value,其score值为number
获取序列编号
zrank zset value
 返回value在zset中的序列(按score升序排列),即索引(下标)
获取反向序列编号
zrevrank zset value 
 返回value在zset中的序列(按score降序排列),即索引(下标)
获取反向序列编号
zrevrange zset index1 index2 [withscores]
 将zset按照score值降序排列,区间为index1至index2,with scores控制是否显示score值
 (测试不通过)
返回给定socre区间元素数量
zcount zset score1 score2
返回给定的value的score值
zscore zset value
移除给定的索引区间的元素
zremrangebyrank zset index1 index2
移除给定的score区间的元素
zremrangebyscore zset score1 score2

Redis常用命令

键值相关命令

返回满足给定的pattern的所有key,如keys , keys mylist
keys [pattern]
确认一个key是否存在
exists key
移除一个key
del key
设置过期时间
expire key number
 给key设置一个过期时间number,单位秒,ttl key显示剩余时间,过期后值为-2
设置永不过期
persist key
 将expire过程中的key持久化,变成不会不过期状态,持久化之后,执行ttl key值为-1
重命名key
rename key new_name
返回key的数据类型
type key
将key移动到其他库
move key schema

服务器命令

测试连接是否存活,如果是,返回PONG
ping
打印内容
echo string
选择数据库,编号0-15
select number 
退出连接
quit 
返回当前数据库key的数目
dbsize
获取服务器信息和统计
info
获取服务器配置信息
config get attribute
查看全部配置
config get * 
清空当前数据库
flushdb
清空所有库
flushall

高级实用特性

1.安全性,设置密码

2.主从复制

master可以有多个slave,slave还可以连接到其他slave。
主从复制不会阻塞master,在数据同步时,master可以继续处理client请求。

3.事务控制

开启事务
multi 
执行事务,提交
exec
事务回滚
discard

注意:redis 部分事务失败,不会回滚全部事务

乐观锁
watch key

4.持久化机制

快照方式 snapshotting

(1)自动保存快照
配置信息:

     save 900 1 #如果900秒内超过1个key被修改,则发起快照保存
     save 300 10 #如果300秒内超过1个key被修改,则发起快照保存
     save 60 10000 …

过程:

 1. redis调用fork,为主进程(父进程)创建一个子进程
 2. 父进程继续处理client请求,子进程将内存内容写入临时文件。子进程地址空间内的数据是fork时的整个数据库的快照。子进程不会影响父进程处理client请求。
 3.当子进程将快照写入临时文件完毕后,用临时文件替换原来的快照文件,然后子进程退出。

(2)save / bgsave

 手动保存快照,在主线程中完成快照保存,会阻塞所有的client请求。
 每次都是将内存数据完整的写入到磁盘,如果数据量大,会引起大量的IO操作,影响性能。

Append-only file方式

 记录每次write的操作内容
 比快照方式更好

5.发布及订阅消息pub/sub

订阅tv1
client1: subscribe tv1
订阅tv2
client2: subscribe tv1 tv2
发布tv1消息,client1 client2收到消息
client3: publish tv1 program1 
发布tv2消息,client2收到消息
client3:publish tv2 program2
批量订阅tv开头的频道内容
psubscribe tv* 

6.Pipeline批量发送请求

 可以将多个命令放到一个tcp报文一起发送、返回。

7.虚拟内存的使用


我有切糕
863 声望45 粉丝

Java架构师,技术经理